"""
Python在3.5版本的时候引入了类型注解，以方便静态类型检查工具，IDE等第三方工具

类型注解：在代码中涉及数据交互的地方，提供数据类型的注解（显式的说明）

主要功能：
    帮助第三方IDE工具（如PyCharm）对代码进行类型推断，协助做代码提示
    帮助开发者自身对变量进行类型注释

支持：
    变量的类型注解
    函数（方法）形参列表和返回值的类型注解

为变量设置类型注解，基础语法：  变量: 类型

注意：
    元组类型设置类型详细注解，需要将每一个元素都标记出来
    字典类型设置类型详细注解，需要2个类型，第一个是key第二个是value

除了使用 变量: 类型， 这种语法做注解外，也可以在注释中进行类型注解，语法：# type: 类型

并不会真正的对类型做验证和判断

也就是，类型注解仅仅是提示性的，不是决定性的

在python3.8及以下的版本当中，不支持在类型注解时指定容器类型的内含类型
"""

"""
1.什么是类型注解，有什么作用？
    在代码中涉及数据交互之时，对数据类型进行显式的说明，可以帮助：
    PyCharm等开发工具对代码做类型推断协助做代码提示
    开发者自身做类型的备注
    
2.类型注解支持：
    变量的类型注解
    函数（方法）的形参和返回值的类型注解
    
3.变量的类型注解语法
    语法1： 变量: 类型
    语法2： 在注释中，# type: 类型
    
4.注意事项
    类型注解只是提示性的，并非决定性的。数据类型和注解类型无法对应也不会导致错误

"""
# 基础数据类型注解
import json
import random


# var_1: int = 10
# var_2: str = "itheima"
# var_3: bool = True
# 类对象类型注解
class Student:
    pass


stu: Student = Student()

# 基础容器类型注解
# my_list: list = [1, 2, 3]
# my_tuple: tuple = (1, 2, 3)
# my_dict: dict = {"itheima": 666}
# 容器类型详细注解
# my_list: list[int] = [1, 2, 3]
# my_tuple: tuple[int, str, bool] = (1, "itheima", True)
# my_dict: dict[str, int] = {"itheima": 666}
# 在注释中进行类型注解
var_1 = random.randint(1, 10)  # type: int
var_2 = json.loads('{"name": "zhangsan"}')  # type: dict[str, str]


def func():
    return 10


var_3 = func()  # type: int
# 类型注解的限制
var_4: int = "itheima"
var_5: str = 123
print(var_4)
